package com.tensquare.base.controller;

import com.tensquare.base.pojo.Label;
import com.tensquare.base.service.LabelService;
import entity.PageResult;
import entity.Result;
import entity.StatusCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * @author Macross
 * @Type LabelController.java
 * @Desc Label的控制器
 * @date 2019/12/16 16:48
 */
@RestController
@RequestMapping("/label")
@CrossOrigin(allowCredentials = "true")
@Api(description = "标签信息管理")
public class LabelController {

    /**
     * 注入labelService服务
     */
    @Autowired
    private LabelService labelService;

    /**
     * 获取所有的标签信息
     * @return 返回请求结果对象，其中包含所有的标签信息
     */
    @ApiOperation(value = "获取标签列表",notes = "获取所有的用户信息")
    @GetMapping
    public Result<List<Label>> getAllLabels(){
        //获取所有的标签信息
        List<Label> labels = labelService.findAll();
        //返回
        return new Result<>(true, StatusCode.OK, "成功查询到数据", labels);
    }

    /**
     * 通过labelId，获取指定的Label信息
     * @param labelId labelId
     * @return 返回请求结果对象，其中指定的Label信息
     */
    @PostMapping("/{labelId}")
    @ApiOperation(value = "获取标签信息",notes = "获取指定标签id的标签信息")
    public Result<Label> findLabelById(@PathVariable @ApiParam(value = "标签id",required = true) String labelId){
        //获取Label信息
        Label label = labelService.findLabelById(labelId);
        //返回
        return new Result<>(true,StatusCode.OK,"操作成功",label);
    }

    /**
     * 保存标签信息
     * @param label 标签信息
     * @return 返回请求结果对象
     */
    @PostMapping
    @ApiOperation(value = "保存标签信息")
    public Result addLabel(@RequestBody @ApiParam(value = "标签信息",required = true) Label label){
        //添加标签信息
        labelService.addLabel(label);
        //返回
        return new Result(true,StatusCode.OK,"添加成功");
    }

    /**
     * 修改标签信息
     * @param labelId 标签id
     * @param label 修改后的标签信息
     * @return 返回请求结果对象
     */
    @PutMapping("/{labelId}")
    @ApiOperation(value = "修改标签信息",notes = "修改指定标签id的标签信息")
    public Result updateLabel(@PathVariable @ApiParam(value = "标签id",required = true) String labelId,
                              @RequestBody @ApiParam(value = "标签内容",required = true) Label label){
        //绑定标签id
        label.setId(labelId);
        //更新对应的标签信息
        labelService.updateLabel(label);
        //返回
        return new Result(true,StatusCode.OK,"修改成功");
    }

    /**
     * 通过标签id，删除标签信息
     * @param labelId 需要删除的标签信息的标签id
     * @return 返回请求结果对象
     */
    @DeleteMapping("/{labelId}")
    @ApiOperation(value = "删除标签信息",notes = "删除指定标签id的标签信息")
    public Result deleteLabelById(@PathVariable @ApiParam(value = "标签id",required = true) String labelId){
        try {
            //删除标签信息
            labelService.deleteById(labelId);
            //返回
            return new Result(true,StatusCode.OK,"删除成功");
        } catch (Exception e) {
            return new Result(false,StatusCode.ERROR,"删除失败");
        }
    }

    /**
     * 通过条件查询获取指定的标签信息
     * @param label 带有查询条件的对象
     * @return 返回请求结果对象,其中包含符合条件的标签列表
     */
    @PostMapping("/search")
    @ApiOperation(value = "搜索标签",notes = "不使用分页查询")
    public Result<List<Label>> search(@RequestBody @ApiParam(value = "带有查询条件的对象",required = true) Label label){
        //查询符合条件的标签信息
        List<Label> labels = labelService.search(label);
        //返回
        return new Result<>(true,StatusCode.OK,"查询成功",labels);
    }

    /**
     * 通过条件查询获取指定的标签信息并进行分页
     * @param label 带有查询条件的对象
     * @param page 分页页码
     * @param size 分页大小
     * @return 返回请求结果对象,其中包含符合条件并进行分页的标签列表
     */
    @PostMapping("/search/{page}/{size}")
    @ApiOperation(value = "搜索标签",notes = "使用分页查询")
    public Result<PageResult<Label>> search(@RequestBody @ApiParam(value = "带有查询条件的对象",required = true) Label label,
                                            @PathVariable @ApiParam(value = "分页页码",required = true)Integer page,
                                            @PathVariable @ApiParam(value = "分页大小",required = true) Integer size){
        //查询符合条件的标签信息
        PageResult<Label> result = labelService.search(label,page,size);
        //返回
        return new Result<>(true,StatusCode.OK,"查询成功",result);
    }

}
